
import pandas as pd
import json
import os
import warnings

def read_country_list(file_path, file_format='csv', encoding='utf-8', delimiter=','):
    """
    读取国家列表及其对应的中英文名称，支持 CSV 和 JSON 格式。
    
    参数:
        file_path: 文件路径（CSV或JSON）
        file_format: 文件格式，默认'csv'，可选'json'
        encoding: 文件编码，默认'utf-8'
        delimiter: 用于CSV的分隔符，默认','
    
    返回:
        字典，键为国家简称，值为(英文名, 中文名)
        
    抛出:
        FileNotFoundError: 文件不存在
        ValueError: 文件格式不支持或数据格式无效
        pd.errors.EmptyDataError: 文件为空
        json.JSONDecodeError: JSON文件解析错误
    """
    # 验证文件是否存在
    if not os.path.exists(file_path):
        raise FileNotFoundError(f"文件不存在: {file_path}")
    
    try:
        # 根据文件格式读取数据
        if file_format.lower() == 'csv':
            try:
                # 尝试多种方式读取CSV文件
                country_list_df = pd.read_csv(
                    file_path, 
                    encoding=encoding,
                    delimiter=delimiter
                )
                
                # 验证CSV文件结构
                required_columns = ['国家名Jc', '国家名En', '国家名Ch']
                missing_columns = [col for col in required_columns if col not in country_list_df.columns]
                
                if missing_columns:
                    raise ValueError(f"CSV文件缺少必要列: {', '.join(missing_columns)}")
                
                # 返回国家字典
                return {
                    row['国家名Jc']: (row['国家名En'], row['国家名Ch']) 
                    for index, row in country_list_df.iterrows()
                }
                
            except Exception as e:
                raise ValueError(f"CSV文件格式错误: {str(e)}") from e
        
        elif file_format.lower() == 'json':
            try:
                with open(file_path, 'r', encoding=encoding) as f:
                    data = json.load(f)
                
                # 验证JSON格式
                if not isinstance(data, dict):
                    raise ValueError("JSON文件必须包含键值对格式的数据")
                    
                # 转换JSON数据为字典
                country_dict = {}
                for key, value in data.items():
                    if isinstance(value, list) and len(value) == 2:
                        country_dict[key] = tuple(value)
                    elif isinstance(value, dict):
                        if 'en' in value and 'zh' in value:
                            country_dict[key] = (value['en'], value['zh'])
                        else:
                            raise ValueError(f"JSON值格式错误: {key}的值需要包含'en'和'zh'字段")
                    else:
                        raise ValueError(f"JSON值格式错误: {key}的值必须是列表或包含'en'和'zh'键的字典")
                
                return country_dict
                
            except json.JSONDecodeError as e:
                raise ValueError(f"JSON文件解析错误: {str(e)}") from e
        
        else:
            raise ValueError(f"不支持的文件格式: {file_format}，请选择'csv'或'json'")
    
    except Exception as e:
        # 设置警告格式，获取详细的错误信息
        warnings.formatwarning = lambda message, category, filename, lineno, 
                               message_text, line: f"错误位置: {filename}:{lineno}: {message_text}"
        warnings.warn(str(e), RuntimeWarning)
        raise

